\documentclass[UTF8]{ctexart}
\usepackage{enumitem} %有序列表和列表缩进
\usepackage{graphicx} %插入图片
\usepackage{tikz} %画流程图
\usetikzlibrary{shapes,arrows}

\title{Janus软件架构说明}
\author{Wang Huan}
\date{2019年7月}

\begin{document}
\maketitle %文章标题
\newpage
\tableofcontents %文章目录
\newpage

% 下面是文章正文
\section{Janus软件框架}

% 插入一张图片
%\begin{figure}[h]
%\centering
%\includegraphics[scale=.5]{sqlite.jpg}
%\caption{sqlite图标}
%\end{figure}

\subsection{Janus框架模块介绍}
Janus框架模块介绍，smcf2，http\dots
\subparagraph{Akubelli} Akubelli是T02 SDK，用于控制T02和获取T02的输出结果
\subparagraph{Hotdb} SQLite封装库，用于进行数据库操作
\subparagraph{SMCF2} 简单模块通信框架V2
\subparagraph{HTTP Server} HTTP服务器
\subparagraph{TCP Server} TCP服务器
\subsubsection{T02控制模块}
T02控制模块
\subsubsection{配置模块}
配置模块
\subsubsection{调试模块}
调试模块
\subsubsection{调试模块}
调试模块
\subsubsection{数据传输模块}
数据传输模块
\subsubsection{人脸入库模块}
人脸入库模块
\subsubsection{人脸特征值提取模块}
人脸特征值提取模块
\subsubsection{人脸识别模块}
人脸识别模块
\subsubsection{固件升级模块}
固件升级模块
\subsubsection{LCD控制模块}
LCD控制模块
\subsubsection{QR读取模块}
QR读取
\subsubsection{TTL控制模块}
TTL控制模块
\subsubsection{Wiegand控制模块}
Wiegand控制模块
\subsubsection{WIFI控制模块}
WIFI控制模块
\subsubsection{录音模块}
录音模块
\subsubsection{放音模块}
放音模块
\subsubsection{视频流模块}
视频流模块
\subsection{Janus框架工作流程}
Janus框架工作流程

\newpage
\section{Janus入库识别流程}
\subsection{人脸入库流程}
\subsubsection{入库流程图}
\tikzstyle{startstop} = [rectangle,rounded corners, minimum width=3cm,minimum height=1cm,text centered, draw=black,fill=red!30]
\tikzstyle{io} = [trapezium, trapezium left angle = 70,trapezium right angle=110,minimum width=3cm,minimum height=1cm,text centered,draw=black,fill=blue!30]
\tikzstyle{process} = [rectangle,minimum width=3cm,minimum height=1cm,text centered,text width =3cm,draw=black,fill=orange!30]
\tikzstyle{decision} = [diamond,minimum width=3cm,minimum height=1cm,text centered,draw=black,fill=green!30]
\tikzstyle{arrow} = [thick,->,>=stealth]

\begin{center}%居中
\begin{tikzpicture}[node distance=2cm]
%node定义
\node (start) [startstop] {开始};
\node (process1) [process,below of=start,yshift=0.2cm] {PC端将人脸图像和Info发送到设备};
\node (decision1) [decision,below of=process1,yshift=-0.2cm] {检查};
\node (process2a) [process,below of=decision1,yshift=0.2cm] {数据正确};
\node (process2b) [process,right of =decision1,xshift=5cm,yshift=0.2cm] {数据错误};
\node (process3) [process,below of=process2a,yshift=0.2cm] {将数据发送到人脸特征值抽取模块};
\node (process4) [process,below of=process3,yshift=0.2cm] {人脸特征值抽取模块抽取Feature};
\node (decision2) [decision,below of=process4,yshift=0.2cm] {检查};
\node (process5a) [process,below of=decision2,yshift=0.2cm] {数据正确};
\node (process5b) [process,right of =decision2,xshift=2cm] {数据错误};
\node (process6) [process,below of=process5a] {将人脸特征值和info发送到入库模块入库};
\node (process7) [process,below of=process6] {发送RespTo主机(OK/ERR)};
\node (stop) [startstop,below of=process7] {结束};

%画箭头
\draw [arrow] (start) -- (process1);
\draw [arrow] (process1) -- (decision1);
\draw [arrow] (decision1) -- node[anchor=east] {yes} (process2a);
\draw [arrow] (decision1) -- node[anchor=south] {no} (process2b);
\draw [arrow] (process2b) |- (process7);
\draw [arrow] (process2a) -- (process3);
\draw [arrow] (process3) -- (process4);
\draw [arrow] (process4) -- (decision2);
\draw [arrow] (decision2) -- node[anchor=east] {yes} (process5a);
\draw [arrow] (decision2) -- node[anchor=south] {no} (process5b);
\draw [arrow] (process5a) -- (process6);
\draw [arrow] (process5b) |- (process7);
\draw [arrow] (process6) -- (process7);
\draw [arrow] (process7) -- (stop);
\end{tikzpicture}
\end{center}
\subsubsection{入库具体操作流程}
人脸入库操作分为以下几步：
\begin{enumerate}[labelindent=\parindent,leftmargin=*]
\item PC端将人脸图片和人物信息数据发送到设备端
\item 设备端接收到人脸图片和人物信息数据之后检查数据正确性
	\begin{enumerate}
	\item 数据正确：将数据人脸数据和信息发送到抽取特征值模块
	\item 数据错误：给PC端返回错误状态与信息，流程结束
	\end{enumerate}
\item 将数据人脸数据和信息发送到抽取特征值模块
\item 抽取特征值模块将人脸图片发送给T02抽取特征值并获取T02返回的特征值
\item 将特征值和人物信息发送给入库模块
\item 入库模块检查特征值和人物信息的正确性
	\begin{enumerate}
	\item 数据正确：进行入库操作
	\item 数据错误：给PC端返回错误状态与信息，流程结束
	\end{enumerate}
\item 返回入库完成状态给PC
\end{enumerate}

\subparagraph{接收人脸数据服务器说明} 在将人脸数据和信息发送给设备时，接收数据的server应该放在face\_exp模块中，但是这样的话需要在face\_exp模块中多维护一个数据链表用于保存PC发送到设备的人脸和信息数据，所以我们现在将server建立在face\_2db模块中，这样不用自己维护一个数据链表而是交给smcf2进行维护。

\subsection{人脸识别流程说明}
\subsubsection{识别流程图}
\subsubsection{识别具体操作流程}

\end{document}